import { Message, Toast } from "cax-ui";

import { useCoreStore, _global, useUserStore } from "@/UI/store";
import { updateProject } from "@/UI/api/projects";
import { TProjectInfo } from "../types/TProjectInfo";

/**
 * @description 保存项目
 * @returns none
 */
export function useSaveProject(
  id: string,
  callback?: (info: TProjectInfo) => void
) {
  const coreStore = useCoreStore();
  const userStore = useUserStore();

  Toast.loading({
    content: "保存中",
    duration: -1,
  });

  _global.Engine.project.save().then((r: any) => {
    coreStore.setProjectInfo(r.data);
    Toast.close();
    Message.success("保存成功");
    callback && callback(r.data);
  });
}

export function useSaveToLocal() {
  Toast.loading({
    content: "保存中",
    duration: -1,
  });
  _global.Engine.project.save().then((r) => {
    Toast.close();
    downloadFileFromUrl(r);
  });
}

/**
 * 通过URL下载文件到本地
 * @param {string} url - 文件的URL地址
 * @param {string} filename - 保存的文件名
 */
function downloadFileFromUrl(url, filename?) {
  // 创建一个隐藏的a标签
  const link = document.createElement("a");
  link.style.display = "none";

  // 设置下载链接和文件名
  link.href = url;
  link.download = filename || getFilenameFromUrl(url);

  // 将链接添加到DOM中
  document.body.appendChild(link);

  // 模拟点击下载
  link.click();

  // 下载启动后移除该元素
  setTimeout(() => {
    document.body.removeChild(link);
    // 释放URL对象
    window.URL.revokeObjectURL(link.href);
  }, 100);
}

/**
 * 从URL中提取文件名
 * @param {string} url - 文件URL
 * @returns {string} 文件名
 */
function getFilenameFromUrl(url) {
  // 尝试从URL中提取文件名
  const pathname = new URL(url).pathname;
  const filename = pathname.substring(pathname.lastIndexOf("/") + 1);

  // 如果无法获取文件名，返回默认名称
  return filename || "downloaded_file";
}
